package unibratec.projeto.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import unibratec.projeto.util.DataUtil;



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class EventoDAO extends SQLiteOpenHelper {
	
	//Declara os atributos que serviram para o banco
	private static final String DB_NAME = "projetoevento";
	private static final String TABLE_NAME = "evento";
	
	//Metodo para inicializar o banco de dados
	public EventoDAO(Context context) {
		super(context, DB_NAME, null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("CREATE TABLE " + TABLE_NAME + " " +
				"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
				" descricao TEXT NOT NULL");
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		
	}

	public void inserir(Evento evento) {
		Log.d("DAO", "inserir");
		ContentValues values = this.criarValues(evento);

		SQLiteDatabase db = this.getWritableDatabase();
		db.insert(TABLE_NAME, null, values);
		db.close();
	}

	public void atualizar(Evento evento) {
		Log.d("DAO", "atualizar");
		ContentValues values = this.criarValues(evento);
		SQLiteDatabase db = this.getWritableDatabase();
		db.update(TABLE_NAME, values, "_id=?", new String[] { String.valueOf(evento.getId_Evento()) });
		db.close();
	}

	public void excluir(Evento evento) {
		Log.d("DAO", "inserir");
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_NAME, "_id=" + evento.getId_Evento(), null);
		db.close();
	}

	public List<Evento> listar() {
		Log.d("DAO", "listar");
		List<Evento> listaEventos = new ArrayList<Evento>();
		SQLiteDatabase db = this.getReadableDatabase();
		Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, "descricao");
		while (cursor.moveToNext()) {
			long id = cursor.getLong(0);
			String descricao = cursor.getString(1);
			
			listaEventos.add(new Evento(id, descricao));
		}
		db.close();
		return listaEventos;
	}

	public List<Evento> pesquisar() {
		Log.d("DAO", "pesquisar");
		List<Evento> listaEventos = new ArrayList<Evento>();
		SQLiteDatabase db = this.getReadableDatabase();
		db.setLocale(Locale.getDefault());
		Cursor cursor = db.rawQuery("SELECT _id, descricao, data, strftime('%Y-%m-%d %H:%M:%S', 'now', '-3 hours') as atual FROM " + TABLE_NAME + " WHERE strftime('%Y-%m-%d %H:%M:%S', data) > strftime('%Y-%m-%d %H:%M:%S', 'now', '-3 hours')", null);
		while (cursor.moveToNext()) {
			long id = cursor.getLong(0);
			String descricao = cursor.getString(1);
			String atual = cursor.getString(3);

			listaEventos.add(new Evento(id, descricao));
		}
		db.close();
		Log.d("DAO", "pesquisar " + listaEventos.size());
		return listaEventos;

	}

	public List<Evento> listaAtualizada() {
		Log.d("DAO", "listaAtualizada");
		List<Evento> listaEventos = this.pesquisar();
		return listaEventos;

	}

	private ContentValues criarValues(Evento evento) {
		ContentValues values = new ContentValues();
		values.put("descricao", evento.getDescricao());
		return values;
	}
}
